home *** CD-ROM | disk | FTP | other *** search
Lex Description | 1995-06-12 | 4.7 KB | 180 lines |
- %{
- /*
- * import_export_mailrc
- *
- * This program is used to convert .mailrc mail configuration file to
- * .mailalias NeXTMail configuration files and back.
- *
- * Copyright (C) 1991 Roberto Di Cosmo
- *
- * Everyone is granted permission to copy, modify and redistribute
- * this file, as far as this notice is preserved on all copies.
- *
- * Written by:
- * Roberto Di Cosmo <dicosmo@dmi.ens.fr>
- * Dipartimento di Informatica LIENS
- * Universita' di Pisa Ecole Normale Superieure
- * Corso Italia, 40 45, Rue d'Ulm
- * Pisa ITALY Paris FRANCE
- *
- * $Header: /users/formel2/dicosmo/Projects/SAVEFROMMAIL/RCS/import_export_mailrc.l,v 1.2 92/05/06 14:20:25 dicosmo Exp $
- *
- * $Log: import_export_mailrc.l,v $
- * Revision 1.2 92/05/06 14:20:25 dicosmo
- * Conversion engine il Lex. Common body for command line
- * and NeXTStep application.
- *
- *
- */
-
- int skipblanks = 1;
- char *aliasname = "";
- char *groupbody = "";
- char *aliasbody = "";
- char *aliases = "";
- char *tmp = "";
- #define YES 1
- #define NO 0
- int is_group = NO;
- int is_balanced = YES;
- int l;
- %}
-
- S [ \t]+
- SS [ \t]*
-
- %Start NrmImp AName Addr0 Addr1 Addr2 Sep NrmExp Copy UserAlias UserAddr
-
-
- NAME [^ \t\n]+
- ADDRESS [^ \t\n,<>]+
-
- %%
-
- <NrmImp>^{S}*"alias"{S}* {BEGIN AName;}
- <NrmImp>. ;
-
- <AName>{NAME} {strcpy(aliasname,yytext); BEGIN Addr0;}
- <AName>[\n] {printf("***Missing alias name ...");}
-
- <Addr0>{S}*"<" {strcpy(tmp,"");BEGIN Addr1;}
- <Addr0>{S}* {BEGIN Addr2;}
- <Addr0>(.|[\n]) {printf("***Missing body of alias %s\n",aliasname);}
-
- <Addr1>{S} ;
- <Addr1>{ADDRESS} {strcat(tmp,yytext);}
- <Addr1>{S}*">" {BEGIN Sep;}
- <Addr1>[\n] {printf("***Address %s of alias %s is not properly balanced ...",aliasbody,aliasname);}
-
- <Addr2>{S} ;
- <Addr2>{ADDRESS} {strcpy(tmp,yytext); BEGIN Sep;}
- <Addr2>[\n] {printf("***Missing alias body of %s...",aliasname);}
-
- <Sep>({S}|",")*[\n] {if (is_group == YES) {strcat(groupbody,tmp);committ_import_group();is_group = NO;}
- else {strcpy(aliasbody,tmp); committ_import_alias();}; BEGIN NrmImp;}
- <Sep>({S}|",")+"<" {strcat(groupbody,tmp); is_group = YES; strcat(groupbody,"\, "); strcpy(tmp,"");BEGIN Addr1;}
- <Sep>({S}|",")+ {strcat(groupbody,tmp); is_group = YES; strcat(groupbody,"\, "); BEGIN Addr2;}
-
-
- <NrmExp>{S} ;
- <NrmExp>^"Private Users:"{S}* {BEGIN UserAlias;}
- <NrmExp>^[^:]+":" {strncat(aliasname, yytext, yyleng-1); BEGIN Copy;}
-
- <Copy>({S}*|",")*[\n] {committ_export_alias(); BEGIN NrmExp;}
- <Copy>. {strcat(aliasbody,yytext);}
-
- <UserAlias>{S} {strcat(aliasname,"_");}
- <UserAlias>{S}*"<" {BEGIN UserAddr;}
- <UserAlias>. {strcat(aliasname,yytext);}
- <UserAlias>[\n] {printf("***Missing address of alias %s\n",aliasname);}
-
- <UserAddr>{S} ;
- <UserAddr>">"({S}|",")*[\n] {committ_export_alias(); BEGIN NrmExp;}
- <UserAddr>">"({S}|",")* {committ_export_alias(); BEGIN UserAlias;}
- <UserAddr>. {strcat(aliasbody,yytext);}
- <UserAddr>[\n] {printf("***Incomplete %s address in alias %s\n",aliasbody,aliasname);}
-
- %%
-
-
- /*
- * Commit group alias for IMPORT
- */
-
- committ_import_group()
- {
- printf("%s: %s\n", aliasname, groupbody);
- resetvars();
- }
-
-
- /*
- * Commit user alias for IMPORT
- */
-
- committ_import_alias()
- {
- sprintf(tmp, "%s <%s>,", aliasname, aliasbody);
- strcat(aliases, tmp);
- resetvars();
- }
-
- /*
- * Commit alias for EXPORT
- */
-
- committ_export_alias()
- {
- printf("alias %s %s\n", aliasname, aliasbody);
- resetvars();
- }
-
- /*
- * this are the *REAL* conversion loops, that are exported...
- */
-
- void import_mailrc()
- {
- allocfields();
- initvars();
- BEGIN NrmImp;
- while (yylex()) {};
- if ((l = strlen(aliases)) > 0) aliases[strlen(aliases)-1]=NULL;
- printf("Private Users: %s\n", aliases);
- }
-
- void export_mailrc()
- {
- allocfields();
- initvars();
- BEGIN NrmExp;
- while (yylex()) {};
- }
-
- /* main()
- {import_mailrc();}
- */
-
- allocfields()
- { /* allocate memory for parser variables */
- tmp = malloc(6000);
- aliasname = malloc(80);
- aliasbody = malloc(1000);
- groupbody = malloc(10000);
- aliases = malloc(50000); /* contains *ALL* the group aliases!!!!! */
- }
-
- initvars()
- {
- (void)strcpy(aliases,"");
- resetvars();
- }
-
- resetvars()
- {
- (void)strcpy(tmp, "" );
- (void)strcpy(aliasname, "" );
- (void)strcpy(aliasbody, "" );
- (void)strcpy(groupbody, "" );
- }
-